#include "stm32f10x.h"


void init_RTC_timer(void){
    
    /*
        RCC_RTCCLKSource_LSE
        选择外部的 lse osc 低速外部时钟源
        具体频率是 32768Hz
    
        RCC_RTCCLKSource_LSE 
        选择外部的高速时钟源，具体为 4-16Mhz
        这里开发板上的为8Mhz
        最终 8000000/128 = 62500Hz
    */
    RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
    
    
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
    
    PWR_BackupAccessCmd(ENABLE);
    while(RTC_GetFlagStatus(RTC_FLAG_RTOFF)==RESET);
    RTC_EnterConfigMode();
    
    /*RCC_RTCCLKSource_LSE 对 32768/32768  可以1s计次
    RTC_SetPrescaler(32768);
    
    RCC_RTCCLKSource_LSE  对 8000000/128/62500  可以约1s计次
    */
    RTC_SetPrescaler(62);
    

    RTC_ExitConfigMode();
    while(RTC_GetFlagStatus(RTC_FLAG_RTOFF)==RESET);
    
    PWR_BackupAccessCmd(DISABLE);
    
    // 开启 RTC 时钟
    RCC_RTCCLKCmd(ENABLE);
}


int get_tick_count(unsigned long *count){

    uint32_t current_count = RTC_GetCounter();
    *count  = (unsigned long)current_count;
    return current_count;
}

/**
    基于内部的 RTC 时钟
    延迟相应单位的 ms
*/
void mdelay(unsigned long nTime){

    uint32_t current_count = RTC_GetCounter();
    
    uint32_t end_count = current_count + nTime;
    while(RTC_GetCounter()<end_count);
    
}
